package com.zhanghu.backendZray.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.zhanghu.backendZray.pojo.dto.UserTokenInfo;
import com.zhanghu.backendZray.pojo.entity.User;
import com.zhanghu.backendZray.pojo.entity.UserOnlineToken;

import java.util.List;

/**
 * <p>
 * 用户token在线状态表 服务类
 * </p>
 *
 * @author zhangdong
 * @since 2024-09-05
 */
public interface UserOnlineTokenService extends IService<UserOnlineToken> {

    /**
     * 登录后保存用户token以及在线状态
     *
     * @param user
     * @param token
     */
    void saveOrUpdate(User user, String token);

    /**
     * 由token查上下文user信息
     *
     * @param token
     * @return
     */
    UserTokenInfo getUserTokenInfoByToken(String token);

    /**
     * 获取所有token未过期的上下文user信息
     */

    List<UserTokenInfo> listUserTokenNoExpire2TokenInfo();

    /**
     * 更新用户状态为在线，并为token续期7天（如果token临近效期（1h前））
     */
    void updateUserStatusAndTokenRenewal(Integer userId);

    /**
     * 用户退出登录
     */
    void logout();

    /**
     * 用户在线状态定期check
     * 5分钟不在线，记为离线
     */
    void loginStatusCheck();

    /**
     * 用户下线
     */
    void offline(int id);

    List<UserOnlineToken> listByUserIdIn(List<Integer> userIdList);
}
